package Thread;
import java.util.Random;
import java.util.concurrent.*;
/**
 * @projectName: Thread-20250806
 * @package: Thread
 * @className: Homework1
 * @author: Tongxinxin
 * @description:
 * 给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
 * 实现代码, 能够创建两个线程, 对这个数组的所有元素求和.
 * 其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和.
 * 最终再汇总两个和, 进行相加
 * 记录程序的执行时间
 * @date: 2025/8/7 19:27
 * @version: 1.0
 */
public class Homework1 {
    static final int ARRAY_SIZE=10000000;
    static final int RANGE=100;
    static long evenSum=0;
    static long oddSum=0;
    public static void main(String[] args) {
       //生成随机数组
        int[] array=generateRandomArray(ARRAY_SIZE, RANGE);
        //记录开始时间
        long startTime=System.currentTimeMillis();
        //使用lambda表达式创建线程
        Thread t1=new Thread(()->{
            for(int i=0;i< array.length;i+=2){
                evenSum+=array[i];
            }
        });
        Thread t2=new Thread(()->{
            for(int i=1;i< array.length;i+=2){
                oddSum+=array[i];
            }
        });
        //启动线程
        t1.start();
        t2.start();
        try {
            t1.join(); //main线程在此等待t1结束
            t2.join(); //等待t2结束
            long totalSum=evenSum+oddSum;
            //记录结束时间
            long endTime=System.currentTimeMillis();
            System.out.println("偶数下标和:"+evenSum);
            System.out.println("奇数下标和:"+oddSum);
            System.out.println("总和:"+totalSum);
            System.out.println("执行时间："+endTime+"ms");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
    //生成随机数组
    private static int[] generateRandomArray(int size,int range){
        int[] array=new int[size];
        Random random=new Random();
        for(int i=0;i<size;i++){
            array[i]=random.nextInt(range)+1;//1-100的随机数
        }
        return array;
    }
}
